home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 2
/
Gekikoh Dennoh Club Vol. 2 (Japan).7z
/
Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin
/
tools
/
8adp
/
test.c
< prev
Wrap
Text File
|
1997-10-13
|
3KB
|
134 lines
#include <stdio.h>
#include <stdlib.h>
#include "8adpcm.h"
#define UNchar unsigned char
#define UNshort unsigned short
#define UNint unsigned int
#define UNlong unsigned long
#define BLOCK (1024*8)
/*-----------------------------------------------*/
void main(ar,av)
int ar;
UNchar **av;
{
int i,j,m,n,f,l,sl,fl;
UNint ll;
UNchar *Mo;
UNchar *Mi;
int fi,fo;
UNchar ext[256],buf[256],dummy[256];
UNchar infn[256],outfn[256];
int de;
PCM2AP8_INIT();
AP82PCM_INIT();
printf( "X68k 8bit-ADPCM DE/ENCODER 評価版 ver 0.01\n"
" Copyright 1997 TNB製作所 8bit-ADPCM Originated by NTSC\n"
);
if ( ar==1 ){
printf( "\n"
"[使い方] 8ADP.x [filename1] [filename2]\n"
"\n"
" filename1 の拡張子で判断し変換します。\n"
" *.S?? なら *.Y?? へ変換します。\n"
" *.Y?? なら *.S?? へ変換します。\n"
"\n"
" filename2 の指定がない場合、filename1 の拡張子を変えて出力\n"
" ファイル名とします。\n"
"\n"
);
return;
}
ll=MALLOC(0xFFFFFFFF);
ll&=0x00FFFFFF;
ll-=256;
ll/=2;
if ( ll>BLOCK )
ll=BLOCK;
Mi=MALLOC(ll);
if ( Mi>=0x81000000 ){
printf(" メモリが確保出来ませんでした。\n");
return;
}
Mo=MALLOC(ll);
if ( Mo>=0x81000000 ){
printf(" メモリが確保出来ませんでした。\n");
return;
}
strsfn(av[1],dummy,dummy,dummy,ext);
if ( (ext[0]|0x20)=='y' ){
//== Yxx -> Sxx だ
de=0;
} else if ( (ext[0]|0x20)=='s' ){
//== Sxx -> Yxx だ
de=-1;
} else {
printf("拡張子が未知です。現在は *.Sxx か *.Yxx のみです。 \n");
return;
}
i=atoi(&ext[1]);
if ( i<=0 || i>99 ){
printf("拡張子が未知です。\n");
return;
}
if ( ar>=3 )
strcpy(buf,av[2]);
else strcpy(buf,av[1]);
if ( de==0 )
ext[0]='S';
else ext[0]='Y';
strmfe(outfn,buf,ext);
fi=OPEN(av[1],0);
if ( fi<0 ){
printf(" [%s]がオープン出来ませんでした。\n",av[1]);
return;
}
fo=CREATE(outfn,0x20);
if ( fo<0 ){
printf(" [%s]が新規オープン出来ませんでした。\n",outfn);
return;
}
fl=SEEK(fi,0,2);
SEEK(fi,0,0);
sl=0;
if ( de==0 )
printf("\n8bit-ADPCMファイル[%s]を DECODE します。\n\n",av[1]);
else printf("\nPCMファイル[%s]を ENCODE します。\n\n",av[1]);
printf("\x1B""0");
for(;;){
if ( de==0 )
l=READ(fi,Mi,ll/2);
else l=READ(fi,Mi,ll);
printf(" 変換中 (%6d)[%6d]\r",sl,fl);
if ( l==0 )
break;
if ( l<0 ){
printf(" 読み込みエラーです。\n");
return;
}
sl+=l;
if ( de==0 ){
//======== Yxx -> Sxx
AP82PCM( Mi,Mo,l );
i=WRITE(fo,Mo,l*2);
if ( l<0 ){
printf(" 書き込みエラーです。\n\x1B""1");
return;
}
} else {
//======== Sxx -> Yxx
PCM2AP8( Mi,Mo,l );
i=WRITE(fo,Mo,l/2);
if ( l<0 ){
printf(" 書き込みエラーです。\n\x1B""1");
return;
}
}
}
printf("\n\x1B""1変換終了しました。\n\n");
return;
}